package com.cgnpc.scp.manager.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cgnpc.cuddemo.utils.IDHelper;
import com.cgnpc.framework.userinfo.CurrentUser;
import com.cgnpc.scp.common.bean.MyPageResult;
import com.cgnpc.scp.common.exception.ScpException;
import com.cgnpc.scp.common.pojo.UserInfo;
import com.cgnpc.scp.common.utils.FreemarkerUtil;
import com.cgnpc.scp.common.utils.MyPageResultUtil;
import com.cgnpc.scp.common.utils.SqlUtil;
import com.cgnpc.scp.common.utils.StringUtil;
import com.cgnpc.scp.manager.mybatis.entity.DataDict;
import com.cgnpc.scp.manager.mybatis.entity.Debugtips;
import com.cgnpc.scp.manager.mybatis.entity.MessageTemplate;
import com.cgnpc.scp.manager.mybatis.mapper.client.MessageTemplateMapper;
import com.cgnpc.scp.manager.service.IMessageTemplateService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/******************************
 * 用途说明: 消息模板
 * 作者姓名: chenshijie
 * 创建时间: 2020/08/11 09:53
 ******************************/
@Service
public class MessageTemplateServiceImpl implements IMessageTemplateService {

    private static final Logger LOGGER = LoggerFactory.getLogger(MessageTemplateServiceImpl.class);

    @Autowired
    private MessageTemplateMapper messageTemplateMapper;

    @Autowired
    CurrentUser currentUser;

    /**********************************
     * 用途说明: 保存消息模板
     * 参数说明 messageTemplate
     * 返回值说明:
     ***********************************/
    @Override
    public int save(MessageTemplate messageTemplate) throws Exception {
        int updateRows = 0;

        try {
            messageTemplate.setId(IDHelper.uuid());
            messageTemplate.setCreateTime(new Date());
            UserInfo userinfo = currentUser.getCurrentUserDetail();
            messageTemplate.setCreateUser(userinfo.getUserId());
            messageTemplate.setCreateUserName(userinfo.getUserName());
            updateRows = messageTemplateMapper.insert(messageTemplate);
        } catch (Exception e) {
            LOGGER.error("save.error;", e);
            throw e;
        }

        return updateRows;
    }

    /**********************************
     * 用途说明: 更新消息模板
     * 参数说明 messageTemplate
     * 返回值说明:
     ***********************************/
    @Override
    public int update(MessageTemplate messageTemplate) throws Exception {
        if(StringUtil.isNullOrSpace(messageTemplate.getId())) {
            throw new ScpException("params errror.");
        }

        int updateRows = 0;

        try {
            messageTemplate.setCreateTime(new Date());
            UserInfo userinfo = currentUser.getCurrentUserDetail();
            messageTemplate.setLastUpdateUser(userinfo.getUserId());
            messageTemplate.setLastUpdateUserName(userinfo.getUserName());
            messageTemplate.setLastUpdateTime(new Date());
            updateRows = messageTemplateMapper.updateById(messageTemplate);
        } catch (Exception e) {
            LOGGER.error("update.error;", e);
            throw e;
        }

        return updateRows;
    }

    /**********************************
     * 用途说明: 分页查询消息模板
     * 参数说明 messageTemplate
     * 返回值说明:
     ***********************************/
    @Override
    public MyPageResult<MessageTemplate> loadByPaging(MessageTemplate messageTemplate) {
        // begin 分页开始
        // 第几页
        int pageNum = messageTemplate.getPageNum();
        // 每页的数量
        int pageSize = messageTemplate.getPageSize();
        // 创建Page对象，将pageNum，pageSize参数传入，必须位于数据库查询数据的语句之前，否则不生效
        com.baomidou.mybatisplus.extension.plugins.pagination.Page<MessageTemplate> page = new Page<>(pageNum, pageSize);
        // mybatis查询方式
//        DataDictExample queryExample = new DataDictExample();
//        DataDictExample.Criteria queryExampleCriteria = queryExample.createCriteria();

        QueryWrapper<MessageTemplate> queryWrapper = new QueryWrapper<>();

        // 设置排序字段
//        queryExample.setOrderByClause("lang desc");

        // 设置查询条件
        if (!StringUtil.isNullOrSpace(messageTemplate.getTemplateName())) {
            queryWrapper.like("template_Name",messageTemplate.getTemplateName());
        }

        // 执行查询
        IPage<MessageTemplate> dbDataDictList = messageTemplateMapper.selectPage(page,queryWrapper);

        MyPageResult<MessageTemplate> myPageResult = MyPageResultUtil.createMyPageResultPlus(dbDataDictList);
        return myPageResult;
    }

    /**********************************
     * 用途说明: 根据id获取消息模板
     * 参数说明 messageTemplate
     * 返回值说明:
     ***********************************/
    @Override
    public MessageTemplate get(MessageTemplate messageTemplate) throws Exception {
        if(StringUtil.isNullOrSpace(messageTemplate.getId())) {
            throw new ScpException("params errror.");
        }
        MessageTemplate message = null;
        try {
            message = messageTemplateMapper.selectById(messageTemplate.getId());
        } catch (Exception e) {
            LOGGER.error("get.error;", e);
            throw e;
        }

        return message;
    }

    /**********************************
     * 用途说明: 根据id删除消息模板
     * 参数说明 ids
     * 返回值说明:
     ***********************************/
    @Override
    public int delete(List<String> ids) throws Exception {
        if(ids.size() == 0) {
            throw new ScpException("params errror.");
        }

        int updateRows = 0;

        try {
            updateRows = messageTemplateMapper.deleteBatchIds(ids);
        } catch (Exception e) {
            LOGGER.error("delete.error;", e);
            throw e;
        }

        return updateRows;
    }
    private String DBmessage_type ="dbyj";
    private String tsjy_xmsk ="tsjy-xmsk";
    private String tsjy_xmjd ="tsjy_xmjd";
    private String hse_tz ="hse_tz";
    /**
     * 获取代办消息模板
     * $(lastOperator)   >上一环节处理人
     * $(submitTime)     >提交日期 xxxx年xx月xx日
     * $(operator)       >操作人
     * $(title)          >主题
     * @return
     */
    public String getDBMessage(){
        QueryWrapper<MessageTemplate> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("template_type",DBmessage_type);
        List<MessageTemplate>  list=messageTemplateMapper.selectList(queryWrapper);
        if(list!=null&&list.size()>0){
            return list.get(0).getTemplateContent();
        }
        return "";
    }

    /**
     * 调试经营管理-项目收款进度通知
     * $(title)          >主题
     * @return
     */
    public String getTsjy_xmsk(){
        QueryWrapper<MessageTemplate> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("template_type",tsjy_xmsk);
        List<MessageTemplate>  list=messageTemplateMapper.selectList(queryWrapper);
        if(list!=null&&list.size()>0){
            return list.get(0).getTemplateContent();
        }
        return "";
    }
    /**
     * 调试经营管理-项目更新进展通知
 *     $(title)            >主题<
 *     $(meetingTime)\    >会议时间
 *     $(convener)        >召开人
 *     $(meetingAddress)  >会议地址
     * @return
     */
    public String getHss_tz(){
        QueryWrapper<MessageTemplate> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("template_type",hse_tz);
        List<MessageTemplate>  list=messageTemplateMapper.selectList(queryWrapper);
        if(list!=null&&list.size()>0){
            return list.get(0).getTemplateContent();
        }
        return "";
    }
    /**
     * 调试经营管理-项目更新进展通知
     *  $(title)            >主题<
     *  $(meetingTime)\    >会议时间
     *  $(convener)        >召开人
     *  $(meetingAddress)  >会议地址
     * @return
     */
    @Override
    public String getTsjy_xmjd(){
        QueryWrapper<MessageTemplate> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("template_type",tsjy_xmjd);
        List<MessageTemplate>  list=messageTemplateMapper.selectList(queryWrapper);
        if(list!=null&&list.size()>0){
            return list.get(0).getTemplateContent();
        }
        return "";
    }
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("username", "lisi");
        String templateString = "欢迎${username}登录！";
        String render = FreemarkerUtil.render(map, templateString);
        //System.out.println(render);
    }
}
